package bean.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import Entities.Cliente;
import Entities.Empleado;
import Entities.Sucursal;
import Management.ManagementSucursal;

public class EmpleadoDAO {

	private static EmpleadoDAO instancia;
	private static SessionFactory sf;
	
	public static EmpleadoDAO getInstancia(){
		if(instancia == null){
			sf = (HibernateDAO.getInstancia().getSession().getSessionFactory());
			instancia = new EmpleadoDAO();
		} 
		return instancia;
	}
	
	public List<Empleado> obtenerEmpleados() {
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		List<Empleado> lista = s.createQuery("from Empleado").list();		
		t.commit();
		return lista;
	}

	public Empleado getEmpleado(int idEmp) {
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		Empleado e = (Empleado) s.createQuery(" from Empleado where id = :identificador").setParameter("identificador", idEmp).uniqueResult();;		
		t.commit();
		return e;
	}

	public void bajaEmpleado(int id) {
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		Query buscarEmpleado =  s.createQuery("SELECT e FROM Empleado e WHERE e.Id = :id").setParameter("id",id);
		Empleado emp = (Empleado) buscarEmpleado.uniqueResult();
        //Borro el objeto de persistencia
        s.delete(emp);
        t.commit();
		
	}

	public void altaEmpleado(int idSuc,Empleado empleado) {
		
		SucursalDAO sucursalDAO = new SucursalDAO(); 
		Sucursal suc = sucursalDAO.getSucursal(idSuc);
		empleado.setSucursal(suc);
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		s.save(empleado);
		t.commit();

	}

	public static void actualizarEmpleado(int idSuc,Empleado empleado) {
		
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		Query buscarEmpleado =  s.createQuery("SELECT e FROM Empleado e WHERE e.Id = :id").setParameter("id",empleado.getId());
		Empleado emp = (Empleado) buscarEmpleado.uniqueResult();
        
		emp.setNombre(empleado.getNombre());
		emp.setApellido(empleado.getApellido());
		emp.setActivo(empleado.isActivo());
		
		SucursalDAO sucursalDAO = new SucursalDAO(); 
		Sucursal suc = sucursalDAO.getSucursal(idSuc);
		emp.setSucursal(suc);
		
		
        s.update(emp);
        t.commit();
		
	}
	
	public static void setSf(SessionFactory sf) {
		EmpleadoDAO.sf = sf;
	}

	public static SessionFactory getSf() {
		return sf;
	}
		

}
